package it.unipg.bipod.applicationLogic;

import it.unipg.bipod.ResManager;

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

/**
 * Mailer fornisce un metodo statico per semplificare l'invio di email.
 * 
 * @author Lorenzo Porzi
 *
 */
abstract class Mailer {
	
	/**
	 * Invia un messaggio email di testo.<br>
	 * Questo metodo utilizza le seguenti proprieta' di application.ini:
	 * <ul>
	 *   <li><b>emailHost</b>: il server smtp utilizzato per l'invio.</li>
	 *   <li><b>emailAuth</b>: "true" se il server richiede autenticazione, "false" altrimenti.</li>
	 *   <li><b>emailAddress</b>: l'indirizzo email di BiPoD.</li>
	 *   <li><b>emailUsername</b>: il nome utente per l'accesso al server.</li>
	 *   <li><b>emailPassword</b>: la password per l'accesso al server.</li>
	 * </ul>
	 * 
	 * @param mesage il testo del messaggio da inviare.
	 * @param subject il soggetto del messaggio.
	 * @param mailto il destinatario.
	 */
	public static boolean sendMail(String message, String subject, String mailto) {		
		/*try {
			Properties settings = ResManager.getInstance().getApplicationSettings();
			Session session;
			
			// Impostazioni SMTP
			Properties smtpProperties = new Properties();
			smtpProperties.put("mail.smtp.host", settings.getProperty("emailHost"));
			boolean isAuthRequired = Boolean.valueOf(settings.getProperty("emailAuth"));
			
			if (isAuthRequired)
				smtpProperties.put("mail.smtp.auth", "true");
			
			if (isAuthRequired)
				session = Session.getInstance(smtpProperties, new SMTPAuth(settings));
			else
				session = Session.getInstance(smtpProperties, null);
			
			// Creo il messaggio
			MimeMessage mimeMessage = new MimeMessage(session);
		
			// Imposto gli indirizzi
			Address to = new InternetAddress(mailto);
			Address from = new InternetAddress(settings.getProperty("emailAddress"));			
			mimeMessage.setFrom(from);
			mimeMessage.setRecipient(Message.RecipientType.TO, to);
			
			// Imposto il contenuto
			mimeMessage.setContent(message, "text/plain");
			mimeMessage.setSubject(subject);
			
			// Invio il messaggio
			Transport.send(mimeMessage);
			
			*/return true;/*
		} catch (Exception e) {
			return false;
		}*/
	}
	
	/**
	 * Classe utilizzata per l'autenticazione SMTP.
	 * 
	 * @author Lorenzo Porzi
	 *
	 */
	private static class SMTPAuth extends Authenticator {
		private Properties settings;
		
		public SMTPAuth(Properties settings) {
			this.settings = settings;
		}
		
		public PasswordAuthentication getPasswordAuthentication() {
	        String username = settings.getProperty("emailUsername");
	        String password = settings.getProperty("emailPassword");
	        return new PasswordAuthentication(username, password);
		}
	}
}